package edu.zut.main.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class SocketDemo1 {
}
/**
 * 客户端与服务器进行通信：  一问一答模式
 *  1、客户端与服务器建立连接（ip+port）
 *  2、客户端发送数据给服务器
 *  3、服务器接收客户端的数据
 *  4、服务器返回数据给客户端
 *  5、客户端再接收数据
 *  6、结束连接，关闭资源
 *
 *  课下自己改写用循环双方一直在通信。直到一方说byebye，才结束
 *   一对一的通信    有多个客户端来访问服务器  多线程控制
 *
 *   多线程：  三个人抢五个苹果
 *   售票：  多个窗口售票      同理
 *   售票：服务器上的某个服务（程序）
 *   多个窗口：客户端
 */
class Client{
    public static void main(String[] args) throws IOException {
        //根据指定的ip以及端口连接服务器上的应用程序
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9999);
        System.out.println("客户端输入发送的数据：");
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        //将数据发送给服务器
        OutputStream os = socket.getOutputStream();
        os.write(s.getBytes());

        socket.shutdownOutput();

        //客户端接收服务器返回的数据
        InputStream is = socket.getInputStream();
        byte[] buffer = new byte[521];
        int len;
        StringBuffer sb = new StringBuffer();
        while ((len = is.read(buffer)) != -1){
            sb.append(new String(buffer,0,len));
        }
        System.out.println("服务器返回："+sb);

        is.close();
        os.close();
        scanner.close();
        socket.close();
    }
}

class Server{
    public static void main(String[] args) throws IOException {
        //ServerSocket 模拟服务器    需要指定端口号   ip就是我们自己的主机
        ServerSocket serverSocket = new ServerSocket(9999);
        Scanner scanner = new Scanner(System.in);
        System.out.println("等待连接中.....");
        //监听客户端连接
        Socket socket = serverSocket.accept();
        System.out.println("连接成功.....");
        //接收客户端发送的数据
        InputStream is = socket.getInputStream();

        byte[] buffer = new byte[521];
        int len;
        StringBuffer sb = new StringBuffer();
        while ((len = is.read(buffer)) != -1){
            sb.append(new String(buffer,0,len));
        }
        System.out.println("接收到的数据:" + sb);

        socket.shutdownInput();

        //服务器返回数据给客户端
        System.out.println("服务器请输入返回数据：");
        String s = scanner.nextLine();
        OutputStream os = socket.getOutputStream();
        os.write(s.getBytes());

        os.close();
        is.close();
        socket.close();
        scanner.close();
        serverSocket.close();
    }
}



